#include <jni.h>
#include <string>
#include <android/log.h>
#include "ArrayStack.hpp"
#include "LinkStack.hpp"

#define TAG "MAIN_TAG"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)

// 递归
//  1. 肯定有递归到底的结束
//  2. 求解的思路能够拆分很多小的部分的，每个小的部分求解思路是一致
//  3. 大的部分是依赖于每个小的部分的解决
int sum(int n) {
    // n 阶乘 需要借助 n-1阶乘*n  n-1 阶乘借助  n-1-1
    if (n == 1) {
        return n;
    }
    return n * sum(n - 1);
}

// 循环 和 递归 区别
extern "C"
JNIEXPORT jstring
JNICALL
Java_com_ndk_day37_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {

    int s = sum(5);
    LOGE("sum = %d", s);
    // 栈内存，方法里面也是栈内存。回去调用方法中new的对象的析构方法。
    LinkStack<int>*stack= new LinkStack<int>();

    stack->push(1);
    stack->push(2);
    /*stack.push(3);

    LOGE("%d", stack.pop());
    LOGE("%d", stack.pop());
    stack.push(4);

    LOGE("%d", stack.pop());
    LOGE("%d", stack.pop());*/

    /*for (int i = 0; i < 10; ++i) {
        stack.push(i);
    }*/

   /* while (!stack.isEmpty()) {
        LOGE("%d", stack.pop());
    }*/

    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}
